

void crea_shot()
{
     for (int i=0;i<6;i++) 
     {
      Ashot[i].activo=false;
       for (int i1=0;i1<3000;i1++)
        { 
            Ashot[i].x[i1]=0;
            Ashot[i].y[i1]=0;
        }
     }     
     Shot.alpha=255;                                                         // fija el nivel de alpha
     Shot.createxturas("sprites/shot.dat");
     Shot.escala=1.4;
} 

/* calc shot positions */ 

int sgn(double value)                                                           // sgn function
{                                                                               // calculate the sing of a double value
 if (value<0)  return -1;                                                       
 if (value>0)  return 1;
 if (value==0) return 0;   
}

void calc_shot(int x1,int y1, int x2, int y2 ,int limit)                                   // limit = limit for shots.
{
 int arraypos;                                                                   // position into array
 for (int i=0;i<limit;i++)
 { 
  if (Ashot[i].activo==false) // si es menor de 0 esta libre
   {
    arraypos=i;
    Ashot[i].count=0;
    Ashot[i].activo=true;
    break; // sale del bucle
    } 
  if (i==limit-1) return;                                                       // previene que no se escriba siempre sobre la posicion 0   
  }
 /* set variables */ 
 int dx1; int dy1; int dx2; int dy2;
 float m; float n; float u; float v; float s;  // precision simple   
 /* init calcs */
 u=x2-x1;v=y2-y1;
 dx1=sgn(u);dy1=sgn(v);dx2=sgn(u);dy2=0;
 m=abs(int(u));n=abs(int(v));
 if (m < n) { dx2 = 0;dy2 = sgn(v);m = abs(int(v));n = abs(int(u)); } 
 s= m / 2;   
 for (int i=0;i<int(m)+500;i++)
 {
  Ashot[arraypos].x[i]=x1;
  Ashot[arraypos].y[i]=y1;
  //if (x1>video.ancho) break; // para si se sale del mapa
  //if (y1>video.alto) break; // para si se sale del mapa
  s = s + n;
  if (s > n) { s=s-m;x1=x1+dx1;y1=y1+dy1; }
   else { x1=x1+dx2;y1=y1+dy2; }
 }  // for
} // end

void enemy_shot(int limit)
{
  static int iTmpshot;                                                      // variable para calcular el tiempo
  int shotdelay=600;
  if ( (SDL_GetTicks() - iTmpshot) < shotdelay)  return;                    // sale si es menor, velocidad de disparo en 350
 iTmpshot = SDL_GetTicks();    

      for (int a=0;a<6;a++)
       {
        if (batss[a].activo==true) 
         calc_shot(int(batss[a].x),int(batss[a].y),int(popolon.x),int(popolon.y),limit);
        if (batss_spr[a].activo==true) 
         calc_shot(int(batss_spr[a].x),int(batss_spr[a].y),int(popolon.x),int(popolon.y),limit);
        if (batss_spl[a].activo==true) 
         calc_shot(int(batss_spl[a].x),int(batss_spl[a].y),int(popolon.x),int(popolon.y),limit); 
        if (batss_zz[a].activo==true) 
         calc_shot(int(batss_zz[a].x),int(batss_zz[a].y),int(popolon.x),int(popolon.y),limit);
        if (bubless[a].activo==true ) // si el sprite esta activo
         calc_shot(bubless[a].x,bubless [a].y,int(popolon.x),int(popolon.y),limit);
        if (bugs[a].activo==true ) 
         calc_shot(bugs[a].x,bugs[a].y,int(popolon.x),int(popolon.y),limit);
       }
}  

void pinta_shot(int limit)
{
  enemy_shot(limit); // first, create shots
  for (int i=0;i<limit;i++)
   if (Ashot[i].activo==true)                                                           // paint shot if y>0
     {
       Shot.x=Ashot[i].x[int(Ashot[i].count)];                                     // x
       if (Shot.x>video.ancho || Shot.x<0) 
        { 
            Ashot[i].activo=false; // set off sprite
            Ashot[i].count=0;
        }
       Shot.y=Ashot[i].y[int(Aprobone[i].count)];                                      // y
       if (Shot.y>video.alto || Shot.y<0) 
        { 
            Ashot[i].activo=false; // set off sprite
            Ashot[i].count=0;
        }
       Shot.pinta(); 
        if (is_game_stop==false) Ashot[i].count+=1.5;
        if (Ashot[i].count > 3000) Ashot[i].count=0;
       /* checkea colisiones */
       if (shield.visible && Shot.collision(&shield.rect))
         {
           Sescudo.play();
           shield_hits+=0.34;                                                   // inc hits
           Ashot[i].activo=false;
           Ashot[i].count=0;                                                   // y
         } // if

       if (Shot.collision(&popolon.rect)) 
         {
          if (is_popolon_fire==true) 
            {
              Ashot[i].activo=false;
              Ashot[i].count=0;          
            }
          if (is_popolon_invisible==false) vidas=6;                             // le quita una vida a popolon
         } // if
     }   
}               
     
